// #include <UI.hpp>

// //这里为了方便我直接设置固定角度，如果板子上有IMU的话，可以直接用IMU的输出结果
// float pitch_angle = 10;
// float yaw_angle = 10;
// float roll_angle = 10;
// //下面的是测试参数，在实际工程中，有其他函数判断得到
// float AngleTh = 30;
// uint16 PodaoFlag = 0; 
// uint16 BarrierFlag = 0;
// uint16 RingFlag = 0;

// uint8_t  datapage = 0;//0：显示ID对应的函数，1：修改arrow对应的参数
// float mul = 1;

// void UI()
// {
// 	if(!datapage)
// 	{
// 		UI_Content();//显示ID对应的函数
// 		UI_ContentKey();//更新ID
// 	}
// 	else
// 	{
// 		UI_Datapage();  //数据页
//         UI_DatapageKey();   //数据按键处理
// 	}
// 	DisplayCursor();//光标显示
// }

// //用来显示各级菜单
// uint8_t  pagenum = 0;//显示page的数目
// uint8_t  arrow = 0;//定义光标所在的行，初始化在第一行
// void UI_Content(void)
// {
// 	TFTSPI_dir_flush();//在显示新一级菜单时，需要清屏
// 	// 根据pagenum去显示菜单
// 	switch(pagenum)
//     {
//         case 0://显示主菜单
// 		{
// 			DisplayMain();
// 		}break;
// 		case 1://显示左电机参数
// 		{
// 			DisplayLeftMotorPara();
// 		}break;
// 		case 2://显示右电机参数
// 		{
// 			DisplayRightMotorPara();
// 		}break;
// 		case 3://显示舵机参数
// 		{
// 			DisplayServoPara();
// 		}break;
// 		case 4://显示IMU参数
// 		{
// 			DisplayIMUPara();
// 		}break;
// 		case 5://显示元素参数
// 		{
// 			DisplayElementPara();
// 		}break;
// 		case 6:
// 		{
// 			DisplayRingPara();
// 		}break;
// 		case 7:
// 		{
// 			DisplayBarrierPara();
// 		}break;
// 		case 8:
// 		{
// 			DisplayPodaoPara();
// 		}break;
// 		default:
// 		{
// 			DisplayMain();	
// 		}break;
// 	}
// }

// //返回上一级菜单
// uint8_t  pagenumup(void)
// {
// 	switch(pagenum)
// 	{
// 		case 0://在一级菜单
// 			return 0;
// 		case 1://在一级菜单
// 			return 0;
// 		case 2://在一级菜单
// 			return 0;
// 		case 3://在一级菜单
// 			return 0;
// 		case 4://在一级菜单
// 			return 0;
// 		case 5://在一级菜单
// 			return 0;
// 		//这里解释一下，当在二级菜单ID=6时，返回的上一级是ID=5
// 		//详情参考：十八届智能车负压电磁组（五）：UI设计
// 		//
// 		case 6://在二级菜单
// 			return 5;
// 		case 7://在二级菜单
// 			return 5;
// 		case 8://在二级菜单
// 			return 5;
		
// 		default:
// 			return 0;
// 	}
// }

// //进入下一级菜单
// //需要判断当前ID：知道在那一页，有些什么参数
// //还需要判断光标所在行：知道要进入哪一个变量里面
// uint8_t  pagenumdown(void)
// {
// 	switch(pagenum)
// 	{
// 		case 0://在主界面
// 		{
// 			switch(arrow)//判断在第几行
// 			{
// 				case 0://在第0行---->对应着参数LeftMotorPara
// 				{
// 					return 1;//返回LeftMotorPara的ID
// 				}
// 				case 1: return 2;//对应RightMotorPara
// 				case 2: return 3;//对应ServoPara
// 				case 3: return 4;//对应IMUPara
// 				case 4: return 5;//对应ElemnetPara
// 			}
// 		}break;
// 		case 1://在LeftMotorPara界面
// 		{
// 			return 1;//返回当前界面
// 			//在该界面下没有下一级，就直接break;
// 		}break;
// 		case 2: return 2;break;//在RightMotorPara界面
// 		case 3: return 3;break;//ServoPara界面
// 		case 4: return 4;break;//IMUPara界面
// 		case 5://ElemnetPara界面
// 		{
// 			switch(arrow)
// 			{
// 				case 0: return 6;//对应Ring
// 				case 1: return 7;//对应Barrier
// 				case 2: return 8;//对应podao
// 				default : return 5;//返回当前界面
// 			}
// 		}break;
		
// 		default:break;
// 	}
// }




// void DisplayCursor()//显示光标
// {
// 	TFTSPI_dir_P6X8Str(0,arrow,">",u16WHITE,u16BLACK);//在参数前面显示>
// }

// //接收按键值，并更新arrow
// void UI_ContentKey()
// {
// 	uint8_t  key = Get_Key_flag();//获取按键值
//     if(key == key1_flag){//向上 up
//         TFTSPI_dir_P6X8Str(0,arrow,"",u16WHITE,u16BLACK);  //需要将当前行的光标隐藏，不然当arrow更新之后，出现两行显示光标
// 		arrow--;//向上移动，arrow减小
// 	}
//     if(key == key2_flag){//向下 down
//         TFTSPI_dir_P6X8Str(0,arrow,"",u16WHITE,u16BLACK);//和up同理
	
// /**********上面的key1,key2是用来上下移动光标的***********/
// /**********下面的key3,key4是用来进入相应的父/子菜单的***********/

//     if(key == key3_flag){//进入子页面  enter
//         TFTSPI_dir_flush();//需要将当前显示清屏，用于显示子界面    
// 		pagenum = pagenumdown();//进入子界面 
// 		arrow = 0;//从第0行开始
// 	}
//     if(key == key4_flag){//返回上一个页面 back
//         TFTSPI_dir_flush();    
// 		pagenum = pagenumup();
// 		arrow = 0;
// 	}
// 	if(key == key5_flag)//更改参数
// 	{
// 		TFTSPI_dir_flush();    
// 		datapage = 1;    
// 		mul = 1;
// 	}
	
// 	//对arrow限幅，OLED屏只能显示8行，所以需要限制 0 <= arrow <8
// 	if(arrow < 0)
// 		arrow = 7;//意思是：当按下up键，光标一直向上移动，当运动到第一行即arrow=0，
// 				  //再按下up时，光标直接跳到最后一行，arrow = 7
// 	else if(arrow >7)
// 		arrow = 0;

// }

// }




// //显示具体的参数
// void UI_Datapage(){
// 	uint8_t  x = 20;
//     uint8_t  y = 40;
// 	TFTSPI_dir_flush();
// 	switch(pagenum)
// 	{
// 		case 0:break;//在ID为0的界面没有需要修改的参数
// 		case 1://对应LeftMotorPara
// 		{
// 			switch(arrow)
// 			{
// 				case 0://kp
// 				{
// 					TFTSPI_dir_P6X8Str(x,0,"LeftMotorkp",u16WHITE,u16BLACK); 
// 					oled_printf_float_spi(y,3,Pid_Left_Motor.kp,3,1);
// 				}break;
// 				case 1://ki
// 				{
// 					TFTSPI_dir_P6X8Str(x,0,"LeftMotorki",u16WHITE,u16BLACK); 
// 					oled_printf_float_spi(y,3,Pid_Left_Motor.ki,3,1);
// 				}break;
// 				case 2://kd
// 				{
// 					TFTSPI_dir_P6X8Str(x,0,"LeftMotorkd",u16WHITE,u16BLACK); 
// 					oled_printf_float_spi(y,3,Pid_Left_Motor.kd,3,1);
// 				}break;
// 				case 3: break;//CurrentSpeed---->不支持修改
// 				case 4://TargetSpeed
// 				{
// 					TFTSPI_dir_P6X8Str(x,0,"TargetSpeed",u16WHITE,u16BLACK); 
// 					oled_printf_float_spi(y,3,Pid_Left_Motor.TargetSpeed,3,1);
// 				}break;
// 				default:break;
// 			}
// 			oled_printf_float_spi(40,7,mul,4,3);//显示倍率
// 		}break;
		
// 		case 2://对应RightMotorPara
// 		{
// 			switch(arrow)
// 			{
// 				case 0://kp
// 				{
// 					TFTSPI_dir_P6X8Str(x,0,"RightMotorkp",u16WHITE,u16BLACK); 
// 					oled_printf_float_spi(y,3,Pid_Right_Motor.kp,3,1);
// 				}break;
// 				case 1://ki
// 				{
// 					TFTSPI_dir_P6X8Str(x,0,"RightMotorki",u16WHITE,u16BLACK); 
// 					oled_printf_float_spi(y,3,Pid_Right_Motor.ki,3,1);
// 				}break;
// 				case 2://kd
// 				{
// 					TFTSPI_dir_P6X8Str(x,0,"RightMotorkd",u16WHITE,u16BLACK); 
// 					oled_printf_float_spi(y,3,Pid_Right_Motor.kd,3,1);
// 				}break;
// 				case 3: break;//CurrentSpeed---->不支持修改
// 				case 4://TargetSpeed
// 				{
// 					TFTSPI_dir_P6X8Str(x,0,"TargetSpeed",u16WHITE,u16BLACK); 
// 					oled_printf_float_spi(y,3,Pid_Right_Motor.TargetSpeed,3,1);
// 				}break;
// 				default:break;
// 			}
// 			oled_printf_float_spi(40,7,mul,4,3);//显示倍率
// 		}break;
// 		case 3://对应ServoPara
// 		{
// 			switch(arrow)
// 			{
// 				case 0://kp
// 				{
// 					TFTSPI_dir_P6X8Str(x,0,"Servokp",u16WHITE,u16BLACK); 
// 					oled_printf_float_spi(y,3,Pid_Servo.kp,3,1);
// 				}break;
// 				case 1://ki
// 				{
// 					TFTSPI_dir_P6X8Str(x,0,"Servoki",u16WHITE,u16BLACK); 
// 					oled_printf_float_spi(y,3,Pid_Servo.ki,3,1);
// 				}break;
// 				case 2://kd
// 				{
// 					TFTSPI_dir_P6X8Str(x,0,"Servokd",u16WHITE,u16BLACK); 
// 					oled_printf_float_spi(y,3,Pid_Servo.kd,3,1);
// 				}break;
// 				default:break;
// 			}
// 			oled_printf_float_spi(40,7,mul,4,3);//显示倍率
// 		}break;			
// 		case 4:break;//对应IMUPara,不支持修改
// 		case 5:break;//对应ElementPara,不支持修改
// 		case 6://对应RingPara
// 		{
// 			switch(arrow)
// 			{
// 				case 0:break;//对应RingFlag,不支持修改
// 				case 1://对应AngleTh
// 				{
// 					TFTSPI_dir_P6X8Str(x,0,"AngleTh"); 
// 					oled_printf_float_spi(y,3,AngleTh,3,1);
// 				}break;
// 				default:break;
// 			}
// 			oled_printf_float_spi(40,7,mul,4,3);//显示倍率
// 		}break;
// 		case 7://对应BarrierPara
// 		{
// 			//自行添加变量
			
// 		}break;
// 		case 8://对应podaoPara
// 		{
// 			//自行添加变量
// 		}break;
		
// 		default:break;
// 	}
// }

// //更改参数
// void UI_DatapageKey()
// {
// 	uint8_t  key = Get_Key_flag();
// 	if(key == key1_flag)//   +
// 	{
// 		switch(pagenum)//判断在哪一页
// 		{
// 			case 1://LeftMotorPara
// 			{
// 				switch(arrow)//哪一行
// 				{
// 					case 0:Pid_Left_Motor.kp += mul;break;
// 					//其他自行添加，这里做一个示范
// 					default:break;
// 				}
// 			}break;
// 			case 2://RightMotorPara
// 			{
// 				switch(arrow)
// 				{
// 					case 0:Pid_Right_Motor.kp += mul;break;
// 					//其他自行添加，这里做一个示范
// 					default:break;
// 				}
// 			}break;
// 			case 3://ServoPara
// 			{
// 				switch(arrow)
// 				{
// 					case 0:Pid_Servo.kp += mul;break;
// 					//其他自行添加，这里做一个示范
// 					default:break;
// 				}
// 			}break;
// 			// .....后面的就自己根据情况添加
// 			default:break;
// 		}
// 	}
// 	if(key == key2_flag)// -
// 	 {
// 		switch(pagenum)//判断在哪一页
// 		{
// 			case 1://LeftMotorPara
// 			{
// 				switch(arrow)//哪一行
// 				{
// 					case 0:Pid_Left_Motor.kp -= mul;break;
// 					//其他自行添加，这里做一个示范
// 					default:break;
// 				}
// 			}break;
// 			case 2://RightMotorPara
// 			{
// 				switch(arrow)
// 				{
// 					case 0:Pid_Right_Motor.kp -= mul;break;
// 					//其他自行添加，这里做一个示范
// 					default:break;
// 				}
// 			}break;
// 			case 3://ServoPara
// 			{
// 				switch(arrow)
// 				{
// 					case 0:Pid_Servo.kp -= mul;break;
// 					//其他自行添加，这里做一个示范
// 					default:break;
// 				}
// 			}break;
// 			// .....后面的就自己根据情况添加
// 			default:break;
// 		}
// 	}
// 	if(key == key3_flag)//更改倍率
//     {
//         mul = mul / 10;
//     }
//     if(key == key4_flag)// 确认更改参数
//     {
//         mul = mul * 10;
//     }
// 	if(key == key5_flag)
// 	{
// 		datapage = 0;
// 	}
	
// }






// void DisplayMain(void)
// {
// 	TFTSPI_dir_P6X8Str(7,0,"1.LeftMotorPara");//左电机参数     		
//     TFTSPI_dir_P6X8Str(7,1,"2.RightMotorPara");//右电机参数       	
//     TFTSPI_dir_P6X8Str(7,2,"3.ServoPara");//舵机参数         	 
// 	TFTSPI_dir_P6X8Str(7,3,"4.IMUPara");//IMU参数         	 
// 	TFTSPI_dir_P6X8Str(7,4,"5.ElementPara");//元素参数         	
// 	TFTSPI_dir_P6X8Str(7,5,"6.Start");//启动 
// 	TFTSPI_dir_P6X8Str(7,6,"7.Stop");//停止
// }
// void DisplayLeftMotorPara(void)
// {
// 	TFTSPI_dir_P6X8Str(7,0,"LeftMotorkp");       	oled_printf_float_spi(80,0,Pid_Left_Motor.kp,3,1);//3位整数，1位小数
// 	TFTSPI_dir_P6X8Str(7,1,"LeftMotorki");      	oled_printf_float_spi(80,1,Pid_Left_Motor.ki,3,1);//3位整数，1位小数
//     TFTSPI_dir_P6X8Str(7,2,"LeftMotorkd");      	oled_printf_float_spi(80,2,Pid_Left_Motor.kd,3,1);//3位整数，1位小数
//     TFTSPI_dir_P6X8Str(7,3,"CurrentSpeed");       oled_printf_float_spi(80,3,LeftCurrentSpeed,3,1);//3位整数，1位小数
//     TFTSPI_dir_P6X8Str(7,4,"TargetSpeed");        oled_printf_float_spi(80,4,Pid_Left_Motor.TargetSpeed,3,1);//3位整数，1位小数
// 	TFTSPI_dir_P6X8Str(7,5,"Out");         		oled_printf_float_spi(80,5,Pid_Left_Motor.out,3,1);//3位整数，1位小数
// }
// void DisplayRightMotorPara(void)
// {
// 	TFTSPI_dir_P6X8Str(7,0,"RightMotorkp");      	oled_printf_float_spi(80,0,Pid_Right_Motor.kp,3,1);//3位整数，1位小数
// 	TFTSPI_dir_P6X8Str(7,1,"RightMotorki");      	oled_printf_float_spi(80,1,Pid_Right_Motor.ki,3,1);//3位整数，1位小数
//     TFTSPI_dir_P6X8Str(7,2,"RightMotorkd");      	oled_printf_float_spi(80,2,Pid_Right_Motor.kd,3,1);//3位整数，1位小数
//     TFTSPI_dir_P6X8Str(7,3,"CurrentSpeed");       oled_printf_float_spi(80,3,RightCurrentSpeed,3,1);//3位整数，1位小数
//     TFTSPI_dir_P6X8Str(7,4,"TargetSpeed");        oled_printf_float_spi(80,4,Pid_Right_Motor.TargetSpeed,3,1);//3位整数，1位小数
// 	TFTSPI_dir_P6X8Str(7,5,"Out");         		oled_printf_float_spi(80,5,Pid_Left_Motor.out,3,1);//3位整数，1位小数
// }
// void DisplayServoPara(void)
// {
// 	TFTSPI_dir_P6X8Str(7,0,"Servokp");       		oled_printf_float_spi(80,0,Pid_Servo.kp,3,1);//3位整数，1位小数
// 	TFTSPI_dir_P6X8Str(7,1,"Servoki");      		oled_printf_float_spi(80,1,Pid_Servo.ki,3,1);//3位整数，1位小数
//     TFTSPI_dir_P6X8Str(7,2,"Servokd");      		oled_printf_float_spi(80,2,Pid_Servo.kd,3,1);//3位整数，1位小数
// 	TFTSPI_dir_P6X8Str(7,3,"Out");         		oled_printf_float_spi(80,3,Pid_Servo.out,3,1);//3位整数，1位小数
// }
// void DisplayIMUPara(void)
// {
// 	TFTSPI_dir_P6X8Str(7,0,"pitch_angle");       	oled_printf_float_spi(80,0,pitch_angle,3,1);//3位整数，1位小数
// 	TFTSPI_dir_P6X8Str(7,1,"yaw_angle");      	oled_printf_float_spi(80,1,yaw_angle,3,1);//3位整数，1位小数
//     TFTSPI_dir_P6X8Str(7,2,"roll_angle");      	oled_printf_float_spi(80,2,roll_angle,3,1);//3位整数，1位小数
// }
// void DisplayElementPara(void)
// {
// 	TFTSPI_dir_P6X8Str(7,0,"Ring");//圆环
// 	TFTSPI_dir_P6X8Str(7,1,"Barrier");//障碍物
// 	TFTSPI_dir_P6X8Str(7,2,"podao");//坡道
// }
// void DisplayRingPara(void)
// {
// 	TFTSPI_dir_P6X8Str(7,0,"RingFlag");			oled_int16_spi(80,0,RingFlag);
// 	TFTSPI_dir_P6X8Str(7,1,"AngleTh");			oled_printf_float_spi(80,1,AngleTh,2,1);
// 	//其他变量根据需要增加
// 	//详情见：十八届智能车负压电磁组（四）：赛道特殊元素处理篇
// 	// https://blog.csdn.net/weixin_51303932/article/details/134793651?spm=1001.2014.3001.5502
// }
// void DisplayBarrierPara(void)
// {
// 	TFTSPI_dir_P6X8Str(7,0,"BarrierFlag");		oled_int16_spi(80,0,BarrierFlag);
// 	//其他变量根据需要增加
// 	//详情见：十八届智能车负压电磁组（四）：赛道特殊元素处理篇
// 	// https://blog.csdn.net/weixin_51303932/article/details/134793651?spm=1001.2014.3001.5502
// }
// void DisplayPodaoPara(void)
// {
// 	TFTSPI_dir_P6X8Str(7,0,"PodaoFlag");			oled_int16_spi(80,0,PodaoFlag);
// 	//其他变量根据需要增加
// 	//详情见：十八届智能车负压电磁组（四）：赛道特殊元素处理篇
// 	// https://blog.csdn.net/weixin_51303932/article/details/134793651?spm=1001.2014.3001.5502
// }
